package br.com.supermercado.dao;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.jboss.seam.annotations.AutoCreate;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;

import br.com.supermercado.domain.Produto;

@Name("produtoDAO")
@AutoCreate
public class ProdutoDAO {

	@In
	private Session hibernateSession;

	public Produto create(Produto produto) {
		hibernateSession.persist(produto);

		return produto;

	}

	public Produto update(Produto produto) {
		hibernateSession.merge(produto);

		return produto;

	}

	public void delete(Produto produto) {
		hibernateSession.delete(produto);

	}

	public Produto load(int id) {
		return (Produto) hibernateSession.get(Produto.class, id);

	}

	@SuppressWarnings("unchecked")
	public List<Produto> loadAll() {
		List<Produto> out = hibernateSession.createQuery("from Produto").list();

		return out;

	}

	public List<Produto> findByDescricao(String descricao) {
		Criteria criteria = hibernateSession.createCriteria(Produto.class);
		
		criteria.add(Restrictions.ilike("descricao", descricao, MatchMode.ANYWHERE));
		criteria.addOrder(Order.asc("descricao"));
		
		List<Produto> out = criteria.list();
		
		return out;
	
	}

	public Produto findByNome(String nomeProduto) {
		Criteria criteria = hibernateSession.createCriteria(Produto.class);
		
		criteria.add(Restrictions.eq("descricao", nomeProduto));
		
		Produto out = (Produto) criteria.uniqueResult();
		
		return out;
		
	}

}
